Modern computer systems, such as personal computers, require various maintenance tasks to be performed on a regular basis. These maintenance tasks include virus scanning, disk defragmentation, adware removal, database compaction, file backup, database encryption, updating of software installed on the computer, and rejuvenation or reinstallation of components of the operating system, or the operating system in its entirety, or performing a portion of a distributed computation. The software programs that perform these maintenance activities are often resource-intensive. Thus, user interactions with the computer are delayed and sluggish during periods when computer system maintenance activities are, for example, running in the background.
Nonetheless, such maintenance tasks are vital for keeping a computer free from viruses, adware, and other problems. Tasks such as compaction and defragmentation improve performance after they have been run, but make the machine very slow and sluggish while they are running. Users should not avoid performing maintenance tasks simply because they slow down a computer's operation while the tasks are being performed, but users often do so. In corporations, the information technology department will often require use of anti-virus or similar programs at a fixed weekly time, often making the machine unusable during that interval.
Thus, it is seen that the state of the art is to schedule such tasks at a fixed time, say weekly, when the software is first installed in the system. Such a fixed time is never convenient for everyone, and is not even convenient for a particular user at the same time every week. In addition, the scheduled time is typically when a user is expected to be away from the system; for example, 10:00 PM on Friday night. This one-size-fits-all approach ignores the reality that often there is time even during business hours to accomplish important computer system maintenance tasks. The more frequently tasks are performed; the better an operating state will be achieved for a computer system. On the other hand, by not scheduling maintenance activities in an “opportunistic” manner when time slots for maintenance activities become available the productivity gains that can be achieved through more frequent performance of maintenance activities are sacrificed.
Thus, there is a need for a more flexible system that complements the regular scheduling of such background and maintenance tasks that initiates maintenance tasks when opportunities for such maintenance become available.
Methods and apparatus that would solve problems encountered in the art outlined thus far would likely have application in situations not typically thought of as maintenance activities but which nonetheless arise from un-scheduled events. For example, when users expect to be away from work for an extended period of time, they often implement an automatic notification feature of an e-mail suite that provides for an automated reply whenever an e-mail message is received in their inbox. The message may indicate that the recipients “will be out of the office for the next week”. The problem associated with using this capability of e-mail suites during a normal workday is the burdensome nature of drafting the reply message and specifying the duration of absence. Users desire an automatic notification feature that can be launched with a minimum of aggravation and perhaps through a common means that also is used to launch opportunistic maintenance activities.
Thus, those skilled in the art desire methods and apparatus that provide an opportunistic maintenance capability. Such methods and apparatus would complement scheduled maintenance activities by allowing maintenance activities to be performed during time slots that occur opportunistically during a normal work day and at other times.
Those skilled in the art also desire methods and apparatus for performing maintenance activities that would initiate a maintenance activity only if it could be performed during the time period when the computer system user expected to be away from the computer system. Those skilled in the art want to avoid situations where a resource-intensive maintenance activity is still running when the user returns to use the computer system.
In addition, those skilled in the art desire methods and apparatus that prioritize maintenance activities to be performed during time slots that opportunistically occur during a workday according to the importance of the maintenance activity and the time required to perform the maintenance activity. In such methods and apparatus, higher priority tasks would be rejected in favor of lower priority tasks in determining which maintenance task to perform if the higher priority task could not be performed in the user-specified time period available for opportunistic system maintenance. In addition, there should be a way to reflect the urgencies of tasks. For example, if two tasks are both to be done weekly, but one was last done yesterday, and the other last done 6 days ago, the latter is more urgent.
Further, those skilled in the art desire methods and apparatus that would return the state of a computer system operating environment to that existing before opportunistic system maintenance was performed. Those skilled in the art do not want to have to re-establish an operating environment after maintenance was performed by, for example re-opening an application program. Those skilled in the art also want to avoid the even more burdensome situation of losing work as a result of maintenance activities.
Finally, those skilled in the art desire that methods and apparatus developed for implementing opportunistic computer system maintenance activities be modified to accommodate other computer system activities that can benefit from such “on the fly scheduling” capability.